/**
 * describe:
 *
 * @author chaP
 * @date 2019/01/29
 */
package CodingTest.AC20190129;

import java.util.HashMap;
import java.util.Map;

/**
 * 给定两个字符串 s 和 t，判断它们是否是同构的。

 如果 s 中的字符可以被替换得到 t ，那么这两个字符串是同构的。

 所有出现的字符都必须用另一个字符替换，同时保留字符的顺序。两个字符不能映射到同一个字符上，但字符可以映射自己本身。

 示例 1:

 输入: s = "egg", t = "add"
 输出: true
 示例 2:

 输入: s = "foo", t = "bar"
 输出: false
 示例 3:

 输入: s = "paper", t = "title"
 输出: true
 */
public class isIsomorphic {
    /**
     * 自己的思路：使用hashmap方法，但复杂度较高
     * @param s
     * @param t
     * @return
     */
    public boolean isIsomorphic1(String s,String t){
        HashMap<Character,Integer> hs = new HashMap<>();
        HashMap<Character,Integer> hs1 = new HashMap<>();
        int len = s.length();
        for(int i = 0;i< len;i++){
            if(!hs.containsKey(s.charAt(i))&&!hs1.containsKey(t.charAt(i))){
                hs.put(s.charAt(i),i);
                hs1.put(t.charAt(i),i);}
            else if(!hs.containsKey(s.charAt(i))||!hs1.containsKey(t.charAt(i))){
                return false;
            }else{
                if(hs.get(s.charAt(i)).intValue()!= hs1.get(t.charAt(i)).intValue()){
                    return false;

            }
                hs.put(s.charAt(i),i);
                hs1.put(t.charAt(i),i);}

        }
        return true;

    }


    public static void main(String[] args) {
        String s = "paper";
        String t = "title";
        isIsomorphic ii = new isIsomorphic();
        boolean result = ii.isIsomorphic1(s,t);
        System.out.println(result);
    }
}
